#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
int n,Ans[N],sa[N],len[N],A[N],flg=0;
namespace subtask1 {
    int Sa[N],Len[N],id[N];
    int cmpSA(int x,int y) {
        for(int i=0;i<=n-max(x,y)-1;i++) {
            if(Ans[x+i]!=Ans[y+i]) return Ans[x+i]<Ans[y+i];
        }
        return x>y;
    }
    void dfs(int x) {
        if(flg) return ;
        if(x==n) {
            int fl=1;
            for(int i=0;i<n;i++) id[i]=i;
            sort(id,id+n,cmpSA);
            for(int i=0;i<n;i++) if(id[i]!=sa[i]) return ;
            int tot=0;
            for(int i=0;i<n;i++) {
                int ls=i-1,rs=i+1,l=1;
                for(;0<=ls && rs<n;) {
                    if(Ans[ls]!=Ans[rs]) break;
                    l+=2; ls--; rs++;
                }
                ++tot;
                if(len[tot]!=l) return ;
                if(i==n-1) continue;
                ls=i,rs=i+1,l=0;
                for(;0<=ls && rs<n;) {
                    if(Ans[ls]!=Ans[rs]) break;
                    l+=2; ls--,rs++;
                }
                ++tot;
                if(len[tot]!=l) return ;
            }
            for(int i=0;i<n;i++) printf("%c",'a'+Ans[i]);
            printf("\n"); flg=1;
            return ;
        }
        for(int i=0;i<8;i++) {
            if(flg) return ;
            Ans[x]=i;
            dfs(x+1);
        }
    }
    void Main() {
        dfs(0);
    }
}
namespace subtask2 {
    void Main() {
        int now=2*n-1,lst=2*n-1,pos=0;
        while(now>=0) {
            lst=now;
            while(len[now]) now--;
            int l=lst,r=now+1;
            for(int i=l;i>=r;i--) if(i%2==1) Ans[(i+1)/2]=pos;
            while(l<=r) {
                if(len[l]!=len[r] || len[l-1]+1!=len[l]) return ;
                l++,r--;
            }
            now--; pos++;
        }
        flg=1;
        for(int i=1;i<=n;i++) printf("%c",Ans[i]+'a');
        printf("\n");
    }
}
int main() {
    freopen("string.in","r",stdin);
    freopen("string.out","w",stdout);
    int Test;
    scanf("%d",&Test);
    while(Test--) {
        scanf("%d",&n); flg=0;
        for(int i=0;i<n;i++) scanf("%d",&sa[i]);
        for(int i=1;i<2*n;i++) scanf("%d",&len[i]);
        len[0]=0; len[2*n]=0;
        if(n<=8) subtask1::Main();
        else subtask2::Main();
        if(!flg) printf("-1\n");
    }
    return 0;
}
/*
3
8
4 6 5 3 2 0 1 7
1 0 3 0 1 0 1 0 1 0 1 0 1 0 1
8
2 5 7 0 4 3 6 1
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
8
2 1 5 4 0 3 6 7
2 1 6 8 7 3 13 13 6 3 22 17 14 14 10
*/